package com.gem.day06;

/**
 * 本类用来演示Java static关键字
 * 
 * static(静态)可以修饰的内容:
 * 1.修饰方法(静态方法)
 * 		直接通过类名.方法名()方式调用,无需创建对象
 * 
 * 2.修饰成员变量
 * 		常量						public static final int ROW_EACH_PAGE = 10;
 * 		静态成员变量		private static int guid = 1;		
 * 		静态属性应用: 产生唯一性自增ID
 * 
 * 3.代码块
 * 		普通代码块,每次创建对象(调用构造方法)前,都会优先调用
 * 		静态代码块,是在类加载后优先执行,而且只执行一次
 * 		
 * 		注意:
 * 		开发中普通代码块一般不用,因为可以把代码直接写在构造方法中即可,
 * 		静态代码块一般需要使用,其中处理一些需要前置操作的重量级费时费力的操作.
 * 
 * 4.类
 * 		静态内部类(后面课程详解)
 * 
 * @author easonsy
 * 2020年7月23日 上午10:24:19
 */
public class StaticDemo {

	//普通成员变量每次创建对象时都会重新初始化
	private int id;

	//静态属性初始化有且仅有一次,当类加载的时候
	private static int guid = 1;

	private String name;

	//代码块(不用!)
	{
		System.out.println("普通代码块.");
	}

	//静态代码块
	static {
		System.out.println("静态代码块.");
	}

	public StaticDemo() {
		System.out.println("StaticDemo.StaticDemo()");
	}

	public StaticDemo(String name) {
		System.out.println("StaticDemo.StaticDemo(name)");
		this.id = guid++;
		this.name = name;
	}

	@Override
	public String toString() {
		return "StaticDemo [id=" + id + ", name=" + name + "]";
	}

	public static void main(String[] args) {
		StaticDemo sd1 = new StaticDemo("AA");
		StaticDemo sd2 = new StaticDemo("BB");
		StaticDemo sd3 = new StaticDemo("BB");
		System.out.println(sd1);
		System.out.println(sd2);
		System.out.println(sd3);
	}
}
